package qreasymarket.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.*;

import javax.security.auth.login.LoginException;
import javax.servlet.jsp.tagext.TryCatchFinally;

import qreasymarket.excepcion.DAOExcepcion;
import qreasymarket.excepcion.LoginExcepcion;
import qreasymarket.modelo.Cliente;
import qreasymarket.modelo.DetallePedido;
import qreasymarket.modelo.ListaCompra;
import qreasymarket.util.ConexionBD;

public class ListaCompraDAO extends BaseDAO {

	public ListaCompra insertar(ListaCompra vo) throws DAOExcepcion {

		String query = "INSERT INTO lista_compra(id_lista_compra,nombre_compra,servicio_delivery,monto_referencial,id_cliente) VALUES (?,?,?,?,?)";
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;

		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, vo.getIdListaCompra());
			stmt.setString(2, vo.getNombreCompra());
			stmt.setString(3, vo.getServicioDelivery());
			stmt.setDouble(4, vo.getMontoReferencial());
			stmt.setInt(5, vo.getIdCliente());

			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo insertar");
			}
			// Obtener el ultimo id
			// int id = 0;
			// query = "SELECT LAST_INSERT_ID()";
			// stmt = con.prepareStatement(query);
			// rs = stmt.executeQuery();
			// if (rs.next()) {
			// id = rs.getInt(1);
			// }
			// vo.setIdListaCompra(id);
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return vo;
	}

	public Collection<ListaCompra> BuscarClientePorEmail(String Email)
			throws DAOExcepcion {

		String query = "select distinct lc.id_lista_compra,lc.nombre_compra,c.id_cliente,c.nombres,c.apaterno,c.amaterno,c.email,dlc.fecha from lista_compra lc INNER JOIN cliente c ON c.id_cliente=lc.id_cliente JOIN detalle_lista_compra dlc ON lc.id_lista_compra=dlc.id_lista_compra WHERE c.email like ?";
		Collection<ListaCompra> listacompra = new ArrayList<ListaCompra>();

		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;

		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, "%" + Email + "%");
			rs = stmt.executeQuery();

			while (rs.next()) {
				ListaCompra vo = new ListaCompra();
				vo.setIdListaCompra(rs.getInt("id_lista_compra"));
				vo.setNombreCompra(rs.getString("nombre_compra"));
				vo.setFechaCreacion(rs.getDate("fecha"));
				vo.setNombres(rs.getString("nombres"));
				vo.setApaterno(rs.getString("apaterno"));
				vo.setAmaterno(rs.getString("amaterno"));
				vo.setEmail(rs.getString("email"));

				listacompra.add(vo);

			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return listacompra;
	}

	public Collection<ListaCompra> BuscarPorEmailActual(String email)
			throws DAOExcepcion {

		String query = "select  distinct lc.id_lista_compra,lc.nombre_compra,c.id_cliente,c.nombres,c.apaterno,c.amaterno,c.email from lista_compra lc INNER JOIN cliente c ON c.id_cliente=lc.id_cliente JOIN detalle_lista_compra dlc ON lc.id_lista_compra=dlc.id_lista_compra WHERE c.email like ?";
		Collection<ListaCompra> useractual = new ArrayList<ListaCompra>();

		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;

		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, "%" + email + "%");
			rs = stmt.executeQuery();

			while (rs.next()) {
				ListaCompra vo = new ListaCompra();
				vo.setIdListaCompra(rs.getInt("id_lista_compra"));
				vo.setNombreCompra(rs.getString("nombre_compra"));
				vo.setIdCliente(rs.getInt("id_cliente"));
				vo.setNombres(rs.getString("nombres"));
				vo.setApaterno(rs.getString("apaterno"));
				vo.setAmaterno(rs.getString("amaterno"));
				vo.setEmail(rs.getString("email"));

				useractual.add(vo);

			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return useractual;
	}
}
